package class01;

import java.io.File;
import java.util.Stack;

public class Code02_CountFiles {

	// 注意这个函数也会统计隐藏文件
	/**
	 * 统计指定文件夹下的文件数量（不包括文件夹）
	 * 使用深度优先搜索(DFS)遍历文件夹结构
	 * 
	 * @param folderPath 文件夹路径
	 * @return 文件夹下所有文件的数量
	 */
	public static int getFileNumber(String folderPath) {
		// 创建File对象表示根目录
		File root = new File(folderPath);
		// 检查路径是否有效（是文件或文件夹）
		if (!root.isDirectory() && !root.isFile()) {
			return 0;
		}
		// 如果路径直接指向一个文件，直接返回1
		if (root.isFile()) {
			return 1;
		}
		// 使用栈来实现深度优先遍历文件夹
		Stack<File> stack = new Stack<>();
		stack.add(root);
		// 记录文件总数
		int files = 0;
		// 当栈不为空时继续遍历
		while (!stack.isEmpty()) {
			// 弹出栈顶文件夹进行处理
			File folder = stack.pop();
			// 遍历该文件夹下的所有文件和子文件夹
			for (File next : folder.listFiles()) {
				// 如果是文件，则计数器加1
				if (next.isFile()) {
					files++;
				}
				// 如果是文件夹，则将其压入栈中待处理
				if (next.isDirectory()) {
					stack.push(next);
				}
			}
		}
		return files;
	}

	public static void main(String[] args) {
		// 你可以自己更改目录
		String path = "/Users/zuochengyun/Desktop/";
		System.out.println(getFileNumber(path));
	}

}